const cheerio = require("cheerio");

function cleanHtml(htmlContent) {
  // 输出日志
  console.log("cleanHtml");

  const $ = cheerio.load(htmlContent); // 确保加载 cheerio

  // 删除所有 img 标签
  $("img").remove();

  // 删除所有 style 标签
  $("style").remove();

  // 删除所有 script 标签
  $("script").remove();

  // 删除所有属性
  $("*").each((i, el) => {
    const attributes = el.attribs;
    for (const key in attributes) {
      if (Object.hasOwnProperty.call(attributes, key)) {
        $(el).removeAttr(key);
      }
    }
  });

  // 删除所有注释
  $("*").each((i, el) => {
    if (el.type === "comment") {
      $(el).remove();
    }
  });

  // 删除所有空白节点
  $("*").each((i, el) => {
    if (el.type === "text" && el.data.trim() === "") {
      $(el).remove();
    }
  });

  // 递归清理首尾没有内容的标签
  // cleanEmptyTags($);

  // 递归清理首尾没有内容的标签

  const cleanEmptyTags = ($element) => {
    $element.each((i, el) => {
      // 如果标签是空的，并且没有子元素
      if ($(el).children().length === 0 && $(el).text().trim() === "") {
        $(el).remove();
      }
      // 如果有子元素，再递归
      else {
        cleanEmptyTags($(el).children()); // 递归处理子标签
      }
    });
  };

  cleanEmptyTags($("body")); // 从 body 开始递归清理

  for (let i = 0; i < 100; i++) {
    cleanEmptyTags($("body")); // 从 body 开始递归清理
  }

  return $.html();
}

// test
// const fs = require("fs");
// const html = fs.readFileSync("page.html", "utf-8");
// const cleanedHtml = cleanHtml(html);
// fs.writeFileSync("page_cleaned.html", cleanedHtml);

module.exports = { cleanHtml };
